package com.information.manage.basic.common.utils.exportAndImport;

import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.information.manage.basic.common.utils.exportAndImport.model.SheetDTO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User:  Initial Heart
 * Date: 2022-05-21.
 * Description:  excel导入导出工具类
 * Version: V1.0
 */
public class ExcelUtils {

    /**
     * excel导入
     * @param file 文件
     * @param titleRows
     * @param headerRows
     * @param pojoClass excel对应的类
     * @return
     */
    public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass) {
        return ExImportExcel.importExcel(file, titleRows, headerRows, pojoClass);
    }

    /**
     * excel导入
     * @param in 输入流
     * @param pojoClass excel对应的类
     * @param params 参数 设置SheetNum、TitleRows、HeadRows等
     * @return
     * @throws Exception
     */
    public static <T> List<T> importExcel(InputStream in, Class<?> pojoClass, ImportParams params) throws Exception {
        return ExImportExcel.importExcel(in, pojoClass, params);
    }

    /**
     * excel导出
     */
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) {
        ExImportExcel.exportExcel(list, title, sheetName, pojoClass, fileName, response);
    }

    /**
     * 从资源文件中导出模板excel
     * @param response
     * @param path resources下的文件路径
     */
    public static void downloadExcelTemplate(HttpServletResponse response, String path) {
        ExImportExcel.downloadExcelTemplate(response, path);
    }

    /**
     * 自定义导出样式导出
     * @param clazz 实现不同样式方法的类  自定义样式的class
     * @param sheetNum (sheet的位置，0表示第一个表格中的第一个sheet)
     * @param sheetName （sheet的名称）
     * @param sheetColor sheet的颜色
     * @param title sheet的标题
     * @param result （表格的数据）
     * @param pojoClass （数据对应的类）
     * @param response 返回的响应
     */
    public static void exportExcel(Class clazz, int sheetNum, String sheetName, Short sheetColor
            , String title, List<?> result, Class<?> pojoClass, HttpServletResponse response){
        try {
            ExImportExcel.exportExcel(clazz, sheetNum, sheetName, sheetColor, title, result, pojoClass, response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 同时多个sheet导出
     * @param sheetDTOList 多个sheet数据
     * @param response 返回的响应
     */
    public static void exportExcel(List<SheetDTO> sheetDTOList, HttpServletResponse response){
        try {
            ExImportExcel.moreSheetExportExcel(sheetDTOList, response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 自定义表格格式导出
     * @param clazz 自定义的类
     * @param response 返回的响应
     * @param list 数据集
     * @param map 可能用到的其它参数
     */
    public static void exportExcel(Class clazz, HttpServletResponse response, List<?> list, Map<String, Object> map){
        try {
            ExImportExcel.customTableExportExcel(clazz, response.getOutputStream(), list, map);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
